package com.itheima.innerClass.test6;

public class TestSwimming {
    public static void main(String[] args) {
        /*
            匿名内部类的使用场景:
                某个接口或者抽象类的方法使用频次非常低的时候,我们就可以使用匿名内部类
                如果接口或抽象类的方法使用频次很多,这时候建议使用标准实现类方式

            匿名内部类和普通实现类的区别：
                1. 匿名内部类本质上是对象【接口的实现类对象/类的子类对象】，普通类是类
                2. 匿名内部类每创建一次就会产生一个新的.class，普通类定义后只会存在一份.class文件
                3. 匿名内部类中定义特有成员没有意义，因为基于多态语法限制下访问不了，普通类可以
        */
        //1. 匿名内部类调用swim方法
        Swimming swim = new Swimming() {
            public void show(){
                System.out.println("我是匿名内部类中的show方法。。。");
            }

            @Override
            public void swim() {
                System.out.println("铁汁, 我们去游泳吧");
            }
        };
//        swim.show();

        //2. 普通实现类对象调用swim方法
        SwimmingImpl sim = new SwimmingImpl();
        sim.swim();
        sim.show();

        new SwimmingImpl();
    }
}

/*
    游泳接口
 */
interface Swimming {
    void swim();
}
//定义实现类
class SwimmingImpl implements Swimming{

    public void show(){
        System.out.println("我是实现类中的show方法。。。");
    }

    @Override
    public void swim() {
        System.out.println("老铁,我们去划水吧...");
    }
}